]> git.r.bdr.sh - rbdr/super-polarity/blobdiff - Super Polarity/Actors/Bullet.cs
Merge branch 'master' of github.com:benbeltran/super-polarity
[rbdr/super-polarity] / Super Polarity / Actors / Bullet.cs
diff --git a/Super Polarity/Actors/Bullet.cs b/Super Polarity/Actors/Bullet.cs
new file mode 100644 (file)
index 0000000..d20289c
--- /dev/null
@@ -0,0 +1,80 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
+
+namespace SuperPolarity
+{
+    class Bullet : Actor
+    {
+        protected ParticleEngine particleEngine;
+        public int Power;
+
+        public Bullet(SuperPolarity newGame)
+            : base(newGame)
+        {
+        }
+
+        ~Bullet()
+        {
+            particleEngine = null;
+        }
+
+        public override void Initialize(Texture2D texture, Vector2 position)
+        {
+            base.Initialize(texture, position);
+            BoxDimensions.X = 10;
+            BoxDimensions.Y = 10;
+            BoxDimensions.W = 10;
+            BoxDimensions.Z = 10;
+            MaxVelocity = 8;
+            InitBox();
+            particleEngine = ParticleEffectFactory.CreateBullet(position);
+        }
+
+        public override void Update(GameTime gameTime)
+        {
+            Velocity.X = (float)(MaxVelocity * Math.Cos(Angle));
+            Velocity.Y = (float)(MaxVelocity * Math.Sin(Angle));
+
+            Power = 1;
+
+            Position += Velocity;
+            UpdateBox();
+
+            particleEngine.Update();
+            particleEngine.EmitterLocation = Position;
+        }
+
+        public override void Draw(SpriteBatch spriteBatch)
+        {
+            base.Draw(spriteBatch);
+            particleEngine.Draw(spriteBatch);
+        }
+
+        public override void Collide(Actor other, Rectangle collision)
+        {
+            if (Dying) { return; }
+            if (other.GetType().IsAssignableFrom(typeof(StandardShip)))
+            {
+                Die();
+                return;
+            }
+        }
+
+        protected override void Die()
+        {
+            ActorManager.CheckOut(this);
+            Renderer.CheckOut(this);
+            Parent.Children.Remove(this);
+        }
+
+        public override void CleanUp()
+        {
+            base.CleanUp();
+            this.particleEngine = null;
+        }
+    }
+}